package org.ehe.erp.domain.quality;

import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import jakarta.validation.constraints.NotBlank;
import jakarta.validation.constraints.NotNull;
import lombok.Data;
import org.ehe.common.mybatis.core.domain.BaseEntity2;
import org.hibernate.validator.constraints.Length;

import java.time.LocalDateTime;
/**
 * 质检任务实体类
 * @author :zhangnn
 * @className :ErpQualityTask
 * @description: TODO
 * @date 2025-09-10 14:17:54
 */
@Data
@TableName("erp_quality_task")
public class ErpQualityTask extends BaseEntity2 {

    /** 质检任务ID */
    @TableId(type = IdType.AUTO)
    private Long id;

    /** 质检任务单号 */
    @NotBlank(message = "质检任务单号不能为空")
    @Length(max = 255, message = "质检任务单号长度不能超过255字符")
    private String taskNo;
    /** BOM ID */
    @NotNull(message = "BOM ID不能为空")
    private Long bomId;

    /** 采购 订单编号 ***/
    private String orderNo;
    /** 采购 订单名称 ***/
    private String orderName;

    /** 状态（0待质检、1质检中、2质检完成、3质检不合格、4任务暂停） */
    @NotNull(message = "状态不能为空")
    private Integer status;

    /** 优先级（1普通、2紧急、3非常紧急） */
    private Integer priority;

    /** 分配的组装质检人员ID */
    private Long assignUserId;

    /** 分配的组装质检人员姓名 */
    @Length(max = 100, message = "组装质检人员姓名长度不能超过100字符")
    private String assignUserName;

    /** 分配状态  0未分配  1已分配*/
    private String assignStatus;
    /** 分配时间    */
    private LocalDateTime assignTime;

    /** 开始质检时间 */
    private LocalDateTime startTime;

    /** 完成时间 */
    private LocalDateTime completeTime;

    /** 超时时长（分钟） */
    private Integer timeoutDuration;

    /** 超时报警时间 */
    private LocalDateTime timeoutAlarmTime;

    /** 是否超时（0否、1是） */
    private Integer isTimeout;

    /** 备注 */
    @Length(max = 1000, message = "备注长度不能超过1000字符")
    private String remark;

    /**
     *   PENDING_SUBMIT(0,"待提交"),
     *     SUBMITTED(1,"已提交"),
     *     REJECTED(9,"已拒绝"),
     *     PROCESS(10, "审核中"), // 审核中
     *     APPROVE(20, "已审核"); // 审核通过
     */
    private String approveStatus;

    /**
     * 预估完成小时数
     */
    private Integer estimatedHours;
    /**
     * 任务截止时间
     */
    private LocalDateTime taskDeadline;

    /**
     * 任务是否超期
     */
    private String isTaskTimeout;

    /**
     * 响应是否超期：处理状态：0-未处理，1-已处理，2-已超期,3-超期未处理，4超期已处理
     * 与respondTime一样。只是统一字段
     */
    private String isOverdue;

    /**
     * 响应 截止时间
     */
    private LocalDateTime isOverdueEndTime;
}
